// 7-9 方阵循环右移 (15分)
// 本题要求编写程序，将给定n×n方阵中的每个元素循环向右移m个位置，即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。

// 输入格式：
// 输入第一行给出两个正整数m和n（1≤n≤6）。接下来一共n行，每行n个整数，表示一个n阶的方阵。

// 输出格式：
// 按照输入格式输出移动后的方阵：即输出n行，每行n个整数，每个整数后输出一个空格。
#include <stdio.h>
#define MAXLEN 6
int main()
{
    int m, n, arr1[MAXLEN][MAXLEN], arr2[MAXLEN][MAXLEN];
    scanf("%d%d", &m, &n);
    m = m % n;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &arr1[i][j]);
        }
    }
    for (int j = 0; j < n; j++)
    {
        for (int i = 0; i < n; i++)
        {
            arr2[i][j] = arr1[i][(n - m + j) > (n - 1) ? (n - m + j - n) : (n - m + j)];  // n-m+j超过n-1就减n，否则还是取n-m+j
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d ", arr2[i][j]);
        }
        printf("\n");
    }

    return 0;
}
// 输入样例：
// 2 3
// 1 2 3
// 4 5 6
// 7 8 9
// 输出样例：
// 2 3 1 
// 5 6 4 
// 8 9 7 